package main

import (
	"fmt"
	"godb/config"

	"github.com/gin-gonic/gin"
	"github.com/redis/go-redis/v9"
)

func main() {

	r := gin.New()

	//抢锁
	r.GET("/setnx", func(c *gin.Context) {

		var incrBy = redis.NewScript(`
		--Lua 脚本
		local key = KEYS[1]     						-- 获取第一个键参数
		local value = ARGV[1]                        	-- 获取第一个值参数
		local ttl = ARGV[2] 							-- 获取第二个值参数
		local result = redis.call("SETNX", key, value)  -- 使用 redis.call 来执行 SETNX 命令
		if result == 1 then
		 redis.call("EXPIRE", key, ttl)
		 end
		return result 									 -- 返回结果
	    `)

		result, err := incrBy.Run(config.Ctx, config.Rdb, []string{"key"}, "hhhhggfhfffghdftdgtdtgdt", 60).Int()
		if err != nil {
			fmt.Println("Error:", err)
		} else {
			if result == 0 {
				fmt.Println("抢锁失败")
			}

			if result == 1 {
				fmt.Println("抢锁成功")
			}
		}

	})

	//解锁
	r.GET("/del", func(c *gin.Context) {

		var incrBy = redis.NewScript(`
		--Lua 脚本
		local key = KEYS[1]                    -- 获取第一个键参数
		local result = redis.call("DEL", key)  -- 删除锁
		return result 						   -- 返回结果
	    `)

		result, err := incrBy.Run(config.Ctx, config.Rdb, []string{"key"}).Int()
		if err != nil {
			fmt.Println("Error:", err)
		}
		if result == 1 {
			fmt.Println("删锁成功")
		}
	})

	r.Run()
}
